home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 19 / Mac Magazin and MacEasy Magazine CD - Issue 19.iso / Utilities / uae-0.4 / Source Code / CPU Sources / cpu8.c < prev    next >
C/C++ Source or Header  |  1996-02-13  |  34KB  |  1,237 lines

  1. #include "config.h"
  2. #include "amiga.h"
  3. #include "options.h"
  4. #include <stdlib.h>
  5. #include "memory.h"
  6. #include "custom.h"
  7. #include "newcpu.h"
  8. #include "cputbl.h"
  9. void op_8000(UWORD opcode)
  10. {
  11.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  12.     ULONG dstreg = (opcode & 3584) >> 9;
  13. {{    BYTE src = regs.d[srcreg];
  14. {    BYTE dst = regs.d[dstreg];
  15.     src |= dst;
  16.     regs.v = regs.c = 0;
  17.     regs.z = ((BYTE)(src)) == 0;
  18.     regs.n = ((BYTE)(src)) < 0;
  19.     regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
  20. }}}}
  21. void op_8010(UWORD opcode)
  22. {
  23.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  24.     ULONG dstreg = (opcode & 3584) >> 9;
  25. {{    CPTR srca = regs.a[srcreg];
  26.     BYTE src = get_byte(srca);
  27. {    BYTE dst = regs.d[dstreg];
  28.     src |= dst;
  29.     regs.v = regs.c = 0;
  30.     regs.z = ((BYTE)(src)) == 0;
  31.     regs.n = ((BYTE)(src)) < 0;
  32.     regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
  33. }}}}
  34. void op_8018(UWORD opcode)
  35. {
  36.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  37.     ULONG dstreg = (opcode & 3584) >> 9;
  38. {{    CPTR srca = regs.a[srcreg];
  39.     BYTE src = get_byte(srca);
  40. {    regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
  41. {    BYTE dst = regs.d[dstreg];
  42.     src |= dst;
  43.     regs.v = regs.c = 0;
  44.     regs.z = ((BYTE)(src)) == 0;
  45.     regs.n = ((BYTE)(src)) < 0;
  46.     regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
  47. }}}}}
  48. void op_8020(UWORD opcode)
  49. {
  50.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  51.     ULONG dstreg = (opcode & 3584) >> 9;
  52. {{    regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
  53. {    CPTR srca = regs.a[srcreg];
  54.     BYTE src = get_byte(srca);
  55. {    BYTE dst = regs.d[dstreg];
  56.     src |= dst;
  57.     regs.v = regs.c = 0;
  58.     regs.z = ((BYTE)(src)) == 0;
  59.     regs.n = ((BYTE)(src)) < 0;
  60.     regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
  61. }}}}}
  62. void op_8028(UWORD opcode)
  63. {
  64.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  65.     ULONG dstreg = (opcode & 3584) >> 9;
  66. {{    CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
  67.     BYTE src = get_byte(srca);
  68. {    BYTE dst = regs.d[dstreg];
  69.     src |= dst;
  70.     regs.v = regs.c = 0;
  71.     regs.z = ((BYTE)(src)) == 0;
  72.     regs.n = ((BYTE)(src)) < 0;
  73.     regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
  74. }}}}
  75. void op_8030(UWORD opcode)
  76. {
  77.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  78.     ULONG dstreg = (opcode & 3584) >> 9;
  79. {{    CPTR srca = regs.a[srcreg];
  80.     UWORD srcdp = nextiword();
  81.     srca += (LONG)(BYTE)(srcdp & 0xFF);
  82. {    ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
  83.     if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
  84.     srca += srcdpr;
  85. {    BYTE src = get_byte(srca);
  86. {    BYTE dst = regs.d[dstreg];
  87.     src |= dst;
  88.     regs.v = regs.c = 0;
  89.     regs.z = ((BYTE)(src)) == 0;
  90.     regs.n = ((BYTE)(src)) < 0;
  91.     regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
  92. }}}}}}
  93. void op_8038(UWORD opcode)
  94. {
  95.     ULONG dstreg = (opcode & 3584) >> 9;
  96. {{    CPTR srca = (LONG)(WORD)nextiword();
  97.     BYTE src = get_byte(srca);
  98. {    BYTE dst = regs.d[dstreg];
  99.     src |= dst;
  100.     regs.v = regs.c = 0;
  101.     regs.z = ((BYTE)(src)) == 0;
  102.     regs.n = ((BYTE)(src)) < 0;
  103.     regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
  104. }}}}
  105. void op_8039(UWORD opcode)
  106. {
  107.     ULONG dstreg = (opcode & 3584) >> 9;
  108. {{    CPTR srca = nextilong();
  109.     BYTE src = get_byte(srca);
  110. {    BYTE dst = regs.d[dstreg];
  111.     src |= dst;
  112.     regs.v = regs.c = 0;
  113.     regs.z = ((BYTE)(src)) == 0;
  114.     regs.n = ((BYTE)(src)) < 0;
  115.     regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
  116. }}}}
  117. void op_803a(UWORD opcode)
  118. {
  119.     ULONG dstreg = (opcode & 3584) >> 9;
  120. {{    CPTR srca = m68k_getpc();
  121.     srca += (LONG)(WORD)nextiword();
  122. {    BYTE src = get_byte(srca);
  123. {    BYTE dst = regs.d[dstreg];
  124.     src |= dst;
  125.     regs.v = regs.c = 0;
  126.     regs.z = ((BYTE)(src)) == 0;
  127.     regs.n = ((BYTE)(src)) < 0;
  128.     regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
  129. }}}}}
  130. void op_803b(UWORD opcode)
  131. {
  132.     ULONG dstreg = (opcode & 3584) >> 9;
  133. {{    CPTR srca = m68k_getpc();
  134.     UWORD srcdp = nextiword();
  135.     srca += (LONG)(BYTE)(srcdp & 0xFF);
  136. {    ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
  137.     if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
  138.     srca += srcdpr;
  139. {    BYTE src = get_byte(srca);
  140. {    BYTE dst = regs.d[dstreg];
  141.     src |= dst;
  142.     regs.v = regs.c = 0;
  143.     regs.z = ((BYTE)(src)) == 0;
  144.     regs.n = ((BYTE)(src)) < 0;
  145.     regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
  146. }}}}}}
  147. void op_803c(UWORD opcode)
  148. {
  149.     ULONG dstreg = (opcode & 3584) >> 9;
  150. {{    BYTE src = nextiword();
  151. {    BYTE dst = regs.d[dstreg];
  152.     src |= dst;
  153.     regs.v = regs.c = 0;
  154.     regs.z = ((BYTE)(src)) == 0;
  155.     regs.n = ((BYTE)(src)) < 0;
  156.     regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
  157. }}}}
  158. void op_8040(UWORD opcode)
  159. {
  160.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  161.     ULONG dstreg = (opcode & 3584) >> 9;
  162. {{    WORD src = regs.d[srcreg];
  163. {    WORD dst = regs.d[dstreg];
  164.     src |= dst;
  165.     regs.v = regs.c = 0;
  166.     regs.z = ((WORD)(src)) == 0;
  167.     regs.n = ((WORD)(src)) < 0;
  168.     regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
  169. }}}}
  170. void op_8050(UWORD opcode)
  171. {
  172.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  173.     ULONG dstreg = (opcode & 3584) >> 9;
  174. {{    CPTR srca = regs.a[srcreg];
  175.     WORD src = get_word(srca);
  176. {    WORD dst = regs.d[dstreg];
  177.     src |= dst;
  178.     regs.v = regs.c = 0;
  179.     regs.z = ((WORD)(src)) == 0;
  180.     regs.n = ((WORD)(src)) < 0;
  181.     regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
  182. }}}}
  183. void op_8058(UWORD opcode)
  184. {
  185.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  186.     ULONG dstreg = (opcode & 3584) >> 9;
  187. {{    CPTR srca = regs.a[srcreg];
  188.     WORD src = get_word(srca);
  189. {    regs.a[srcreg] += 2;
  190. {    WORD dst = regs.d[dstreg];
  191.     src |= dst;
  192.     regs.v = regs.c = 0;
  193.     regs.z = ((WORD)(src)) == 0;
  194.     regs.n = ((WORD)(src)) < 0;
  195.     regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
  196. }}}}}
  197. void op_8060(UWORD opcode)
  198. {
  199.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  200.     ULONG dstreg = (opcode & 3584) >> 9;
  201. {{    regs.a[srcreg] -= 2;
  202. {    CPTR srca = regs.a[srcreg];
  203.     WORD src = get_word(srca);
  204. {    WORD dst = regs.d[dstreg];
  205.     src |= dst;
  206.     regs.v = regs.c = 0;
  207.     regs.z = ((WORD)(src)) == 0;
  208.     regs.n = ((WORD)(src)) < 0;
  209.     regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
  210. }}}}}
  211. void op_8068(UWORD opcode)
  212. {
  213.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  214.     ULONG dstreg = (opcode & 3584) >> 9;
  215. {{    CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
  216.     WORD src = get_word(srca);
  217. {    WORD dst = regs.d[dstreg];
  218.     src |= dst;
  219.     regs.v = regs.c = 0;
  220.     regs.z = ((WORD)(src)) == 0;
  221.     regs.n = ((WORD)(src)) < 0;
  222.     regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
  223. }}}}
  224. void op_8070(UWORD opcode)
  225. {
  226.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  227.     ULONG dstreg = (opcode & 3584) >> 9;
  228. {{    CPTR srca = regs.a[srcreg];
  229.     UWORD srcdp = nextiword();
  230.     srca += (LONG)(BYTE)(srcdp & 0xFF);
  231. {    ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
  232.     if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
  233.     srca += srcdpr;
  234. {    WORD src = get_word(srca);
  235. {    WORD dst = regs.d[dstreg];
  236.     src |= dst;
  237.     regs.v = regs.c = 0;
  238.     regs.z = ((WORD)(src)) == 0;
  239.     regs.n = ((WORD)(src)) < 0;
  240.     regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
  241. }}}}}}
  242. void op_8078(UWORD opcode)
  243. {
  244.     ULONG dstreg = (opcode & 3584) >> 9;
  245. {{    CPTR srca = (LONG)(WORD)nextiword();
  246.     WORD src = get_word(srca);
  247. {    WORD dst = regs.d[dstreg];
  248.     src |= dst;
  249.     regs.v = regs.c = 0;
  250.     regs.z = ((WORD)(src)) == 0;
  251.     regs.n = ((WORD)(src)) < 0;
  252.     regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
  253. }}}}
  254. void op_8079(UWORD opcode)
  255. {
  256.     ULONG dstreg = (opcode & 3584) >> 9;
  257. {{    CPTR srca = nextilong();
  258.     WORD src = get_word(srca);
  259. {    WORD dst = regs.d[dstreg];
  260.     src |= dst;
  261.     regs.v = regs.c = 0;
  262.     regs.z = ((WORD)(src)) == 0;
  263.     regs.n = ((WORD)(src)) < 0;
  264.     regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
  265. }}}}
  266. void op_807a(UWORD opcode)
  267. {
  268.     ULONG dstreg = (opcode & 3584) >> 9;
  269. {{    CPTR srca = m68k_getpc();
  270.     srca += (LONG)(WORD)nextiword();
  271. {    WORD src = get_word(srca);
  272. {    WORD dst = regs.d[dstreg];
  273.     src |= dst;
  274.     regs.v = regs.c = 0;
  275.     regs.z = ((WORD)(src)) == 0;
  276.     regs.n = ((WORD)(src)) < 0;
  277.     regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
  278. }}}}}
  279. void op_807b(UWORD opcode)
  280. {
  281.     ULONG dstreg = (opcode & 3584) >> 9;
  282. {{    CPTR srca = m68k_getpc();
  283.     UWORD srcdp = nextiword();
  284.     srca += (LONG)(BYTE)(srcdp & 0xFF);
  285. {    ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
  286.     if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
  287.     srca += srcdpr;
  288. {    WORD src = get_word(srca);
  289. {    WORD dst = regs.d[dstreg];
  290.     src |= dst;
  291.     regs.v = regs.c = 0;
  292.     regs.z = ((WORD)(src)) == 0;
  293.     regs.n = ((WORD)(src)) < 0;
  294.     regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
  295. }}}}}}
  296. void op_807c(UWORD opcode)
  297. {
  298.     ULONG dstreg = (opcode & 3584) >> 9;
  299. {{    WORD src = nextiword();
  300. {    WORD dst = regs.d[dstreg];
  301.     src |= dst;
  302.     regs.v = regs.c = 0;
  303.     regs.z = ((WORD)(src)) == 0;
  304.     regs.n = ((WORD)(src)) < 0;
  305.     regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
  306. }}}}
  307. void op_8080(UWORD opcode)
  308. {
  309.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  310.     ULONG dstreg = (opcode & 3584) >> 9;
  311. {{    LONG src = regs.d[srcreg];
  312. {    LONG dst = regs.d[dstreg];
  313.     src |= dst;
  314.     regs.v = regs.c = 0;
  315.     regs.z = ((LONG)(src)) == 0;
  316.     regs.n = ((LONG)(src)) < 0;
  317.     regs.d[dstreg] = (src);
  318. }}}}
  319. void op_8090(UWORD opcode)
  320. {
  321.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  322.     ULONG dstreg = (opcode & 3584) >> 9;
  323. {{    CPTR srca = regs.a[srcreg];
  324.     LONG src = get_long(srca);
  325. {    LONG dst = regs.d[dstreg];
  326.     src |= dst;
  327.     regs.v = regs.c = 0;
  328.     regs.z = ((LONG)(src)) == 0;
  329.     regs.n = ((LONG)(src)) < 0;
  330.     regs.d[dstreg] = (src);
  331. }}}}
  332. void op_8098(UWORD opcode)
  333. {
  334.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  335.     ULONG dstreg = (opcode & 3584) >> 9;
  336. {{    CPTR srca = regs.a[srcreg];
  337.     LONG src = get_long(srca);
  338. {    regs.a[srcreg] += 4;
  339. {    LONG dst = regs.d[dstreg];
  340.     src |= dst;
  341.     regs.v = regs.c = 0;
  342.     regs.z = ((LONG)(src)) == 0;
  343.     regs.n = ((LONG)(src)) < 0;
  344.     regs.d[dstreg] = (src);
  345. }}}}}
  346. void op_80a0(UWORD opcode)
  347. {
  348.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  349.     ULONG dstreg = (opcode & 3584) >> 9;
  350. {{    regs.a[srcreg] -= 4;
  351. {    CPTR srca = regs.a[srcreg];
  352.     LONG src = get_long(srca);
  353. {    LONG dst = regs.d[dstreg];
  354.     src |= dst;
  355.     regs.v = regs.c = 0;
  356.     regs.z = ((LONG)(src)) == 0;
  357.     regs.n = ((LONG)(src)) < 0;
  358.     regs.d[dstreg] = (src);
  359. }}}}}
  360. void op_80a8(UWORD opcode)
  361. {
  362.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  363.     ULONG dstreg = (opcode & 3584) >> 9;
  364. {{    CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
  365.     LONG src = get_long(srca);
  366. {    LONG dst = regs.d[dstreg];
  367.     src |= dst;
  368.     regs.v = regs.c = 0;
  369.     regs.z = ((LONG)(src)) == 0;
  370.     regs.n = ((LONG)(src)) < 0;
  371.     regs.d[dstreg] = (src);
  372. }}}}
  373. void op_80b0(UWORD opcode)
  374. {
  375.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  376.     ULONG dstreg = (opcode & 3584) >> 9;
  377. {{    CPTR srca = regs.a[srcreg];
  378.     UWORD srcdp = nextiword();
  379.     srca += (LONG)(BYTE)(srcdp & 0xFF);
  380. {    ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
  381.     if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
  382.     srca += srcdpr;
  383. {    LONG src = get_long(srca);
  384. {    LONG dst = regs.d[dstreg];
  385.     src |= dst;
  386.     regs.v = regs.c = 0;
  387.     regs.z = ((LONG)(src)) == 0;
  388.     regs.n = ((LONG)(src)) < 0;
  389.     regs.d[dstreg] = (src);
  390. }}}}}}
  391. void op_80b8(UWORD opcode)
  392. {
  393.     ULONG dstreg = (opcode & 3584) >> 9;
  394. {{    CPTR srca = (LONG)(WORD)nextiword();
  395.     LONG src = get_long(srca);
  396. {    LONG dst = regs.d[dstreg];
  397.     src |= dst;
  398.     regs.v = regs.c = 0;
  399.     regs.z = ((LONG)(src)) == 0;
  400.     regs.n = ((LONG)(src)) < 0;
  401.     regs.d[dstreg] = (src);
  402. }}}}
  403. void op_80b9(UWORD opcode)
  404. {
  405.     ULONG dstreg = (opcode & 3584) >> 9;
  406. {{    CPTR srca = nextilong();
  407.     LONG src = get_long(srca);
  408. {    LONG dst = regs.d[dstreg];
  409.     src |= dst;
  410.     regs.v = regs.c = 0;
  411.     regs.z = ((LONG)(src)) == 0;
  412.     regs.n = ((LONG)(src)) < 0;
  413.     regs.d[dstreg] = (src);
  414. }}}}
  415. void op_80ba(UWORD opcode)
  416. {
  417.     ULONG dstreg = (opcode & 3584) >> 9;
  418. {{    CPTR srca = m68k_getpc();
  419.     srca += (LONG)(WORD)nextiword();
  420. {    LONG src = get_long(srca);
  421. {    LONG dst = regs.d[dstreg];
  422.     src |= dst;
  423.     regs.v = regs.c = 0;
  424.     regs.z = ((LONG)(src)) == 0;
  425.     regs.n = ((LONG)(src)) < 0;
  426.     regs.d[dstreg] = (src);
  427. }}}}}
  428. void op_80bb(UWORD opcode)
  429. {
  430.     ULONG dstreg = (opcode & 3584) >> 9;
  431. {{    CPTR srca = m68k_getpc();
  432.     UWORD srcdp = nextiword();
  433.     srca += (LONG)(BYTE)(srcdp & 0xFF);
  434. {    ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
  435.     if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
  436.     srca += srcdpr;
  437. {    LONG src = get_long(srca);
  438. {    LONG dst = regs.d[dstreg];
  439.     src |= dst;
  440.     regs.v = regs.c = 0;
  441.     regs.z = ((LONG)(src)) == 0;
  442.     regs.n = ((LONG)(src)) < 0;
  443.     regs.d[dstreg] = (src);
  444. }}}}}}
  445. void op_80bc(UWORD opcode)
  446. {
  447.     ULONG dstreg = (opcode & 3584) >> 9;
  448. {{    LONG src = nextilong();
  449. {    LONG dst = regs.d[dstreg];
  450.     src |= dst;
  451.     regs.v = regs.c = 0;
  452.     regs.z = ((LONG)(src)) == 0;
  453.     regs.n = ((LONG)(src)) < 0;
  454.     regs.d[dstreg] = (src);
  455. }}}}
  456. void op_80c0(UWORD opcode)
  457. {
  458.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  459.     ULONG dstreg = (opcode & 3584) >> 9;
  460. {{    WORD src = regs.d[srcreg];
  461. {    LONG dst = regs.d[dstreg];
  462.     if(src != 0){
  463.     ULONG newv = (ULONG)dst / (UWORD)src;
  464.     ULONG rem = (ULONG)dst % (UWORD)src;
  465.     if (newv > 0xffff) { regs.v = regs.n = 1; } else
  466.     {
  467.     regs.v = regs.c = 0;
  468.     regs.z = ((WORD)(newv)) == 0;
  469.     regs.n = ((WORD)(newv)) < 0;
  470.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  471.     regs.d[dstreg] = (newv);
  472.     }
  473.     }
  474. }}}}
  475. void op_80d0(UWORD opcode)
  476. {
  477.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  478.     ULONG dstreg = (opcode & 3584) >> 9;
  479. {{    CPTR srca = regs.a[srcreg];
  480.     WORD src = get_word(srca);
  481. {    LONG dst = regs.d[dstreg];
  482.     if(src != 0){
  483.     ULONG newv = (ULONG)dst / (UWORD)src;
  484.     ULONG rem = (ULONG)dst % (UWORD)src;
  485.     if (newv > 0xffff) { regs.v = regs.n = 1; } else
  486.     {
  487.     regs.v = regs.c = 0;
  488.     regs.z = ((WORD)(newv)) == 0;
  489.     regs.n = ((WORD)(newv)) < 0;
  490.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  491.     regs.d[dstreg] = (newv);
  492.     }
  493.     }
  494. }}}}
  495. void op_80d8(UWORD opcode)
  496. {
  497.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  498.     ULONG dstreg = (opcode & 3584) >> 9;
  499. {{    CPTR srca = regs.a[srcreg];
  500.     WORD src = get_word(srca);
  501. {    regs.a[srcreg] += 2;
  502. {    LONG dst = regs.d[dstreg];
  503.     if(src != 0){
  504.     ULONG newv = (ULONG)dst / (UWORD)src;
  505.     ULONG rem = (ULONG)dst % (UWORD)src;
  506.     if (newv > 0xffff) { regs.v = regs.n = 1; } else
  507.     {
  508.     regs.v = regs.c = 0;
  509.     regs.z = ((WORD)(newv)) == 0;
  510.     regs.n = ((WORD)(newv)) < 0;
  511.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  512.     regs.d[dstreg] = (newv);
  513.     }
  514.     }
  515. }}}}}
  516. void op_80e0(UWORD opcode)
  517. {
  518.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  519.     ULONG dstreg = (opcode & 3584) >> 9;
  520. {{    regs.a[srcreg] -= 2;
  521. {    CPTR srca = regs.a[srcreg];
  522.     WORD src = get_word(srca);
  523. {    LONG dst = regs.d[dstreg];
  524.     if(src != 0){
  525.     ULONG newv = (ULONG)dst / (UWORD)src;
  526.     ULONG rem = (ULONG)dst % (UWORD)src;
  527.     if (newv > 0xffff) { regs.v = regs.n = 1; } else
  528.     {
  529.     regs.v = regs.c = 0;
  530.     regs.z = ((WORD)(newv)) == 0;
  531.     regs.n = ((WORD)(newv)) < 0;
  532.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  533.     regs.d[dstreg] = (newv);
  534.     }
  535.     }
  536. }}}}}
  537. void op_80e8(UWORD opcode)
  538. {
  539.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  540.     ULONG dstreg = (opcode & 3584) >> 9;
  541. {{    CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
  542.     WORD src = get_word(srca);
  543. {    LONG dst = regs.d[dstreg];
  544.     if(src != 0){
  545.     ULONG newv = (ULONG)dst / (UWORD)src;
  546.     ULONG rem = (ULONG)dst % (UWORD)src;
  547.     if (newv > 0xffff) { regs.v = regs.n = 1; } else
  548.     {
  549.     regs.v = regs.c = 0;
  550.     regs.z = ((WORD)(newv)) == 0;
  551.     regs.n = ((WORD)(newv)) < 0;
  552.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  553.     regs.d[dstreg] = (newv);
  554.     }
  555.     }
  556. }}}}
  557. void op_80f0(UWORD opcode)
  558. {
  559.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  560.     ULONG dstreg = (opcode & 3584) >> 9;
  561. {{    CPTR srca = regs.a[srcreg];
  562.     UWORD srcdp = nextiword();
  563.     srca += (LONG)(BYTE)(srcdp & 0xFF);
  564. {    ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
  565.     if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
  566.     srca += srcdpr;
  567. {    WORD src = get_word(srca);
  568. {    LONG dst = regs.d[dstreg];
  569.     if(src != 0){
  570.     ULONG newv = (ULONG)dst / (UWORD)src;
  571.     ULONG rem = (ULONG)dst % (UWORD)src;
  572.     if (newv > 0xffff) { regs.v = regs.n = 1; } else
  573.     {
  574.     regs.v = regs.c = 0;
  575.     regs.z = ((WORD)(newv)) == 0;
  576.     regs.n = ((WORD)(newv)) < 0;
  577.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  578.     regs.d[dstreg] = (newv);
  579.     }
  580.     }
  581. }}}}}}
  582. void op_80f8(UWORD opcode)
  583. {
  584.     ULONG dstreg = (opcode & 3584) >> 9;
  585. {{    CPTR srca = (LONG)(WORD)nextiword();
  586.     WORD src = get_word(srca);
  587. {    LONG dst = regs.d[dstreg];
  588.     if(src != 0){
  589.     ULONG newv = (ULONG)dst / (UWORD)src;
  590.     ULONG rem = (ULONG)dst % (UWORD)src;
  591.     if (newv > 0xffff) { regs.v = regs.n = 1; } else
  592.     {
  593.     regs.v = regs.c = 0;
  594.     regs.z = ((WORD)(newv)) == 0;
  595.     regs.n = ((WORD)(newv)) < 0;
  596.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  597.     regs.d[dstreg] = (newv);
  598.     }
  599.     }
  600. }}}}
  601. void op_80f9(UWORD opcode)
  602. {
  603.     ULONG dstreg = (opcode & 3584) >> 9;
  604. {{    CPTR srca = nextilong();
  605.     WORD src = get_word(srca);
  606. {    LONG dst = regs.d[dstreg];
  607.     if(src != 0){
  608.     ULONG newv = (ULONG)dst / (UWORD)src;
  609.     ULONG rem = (ULONG)dst % (UWORD)src;
  610.     if (newv > 0xffff) { regs.v = regs.n = 1; } else
  611.     {
  612.     regs.v = regs.c = 0;
  613.     regs.z = ((WORD)(newv)) == 0;
  614.     regs.n = ((WORD)(newv)) < 0;
  615.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  616.     regs.d[dstreg] = (newv);
  617.     }
  618.     }
  619. }}}}
  620. void op_80fa(UWORD opcode)
  621. {
  622.     ULONG dstreg = (opcode & 3584) >> 9;
  623. {{    CPTR srca = m68k_getpc();
  624.     srca += (LONG)(WORD)nextiword();
  625. {    WORD src = get_word(srca);
  626. {    LONG dst = regs.d[dstreg];
  627.     if(src != 0){
  628.     ULONG newv = (ULONG)dst / (UWORD)src;
  629.     ULONG rem = (ULONG)dst % (UWORD)src;
  630.     if (newv > 0xffff) { regs.v = regs.n = 1; } else
  631.     {
  632.     regs.v = regs.c = 0;
  633.     regs.z = ((WORD)(newv)) == 0;
  634.     regs.n = ((WORD)(newv)) < 0;
  635.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  636.     regs.d[dstreg] = (newv);
  637.     }
  638.     }
  639. }}}}}
  640. void op_80fb(UWORD opcode)
  641. {
  642.     ULONG dstreg = (opcode & 3584) >> 9;
  643. {{    CPTR srca = m68k_getpc();
  644.     UWORD srcdp = nextiword();
  645.     srca += (LONG)(BYTE)(srcdp & 0xFF);
  646. {    ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
  647.     if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
  648.     srca += srcdpr;
  649. {    WORD src = get_word(srca);
  650. {    LONG dst = regs.d[dstreg];
  651.     if(src != 0){
  652.     ULONG newv = (ULONG)dst / (UWORD)src;
  653.     ULONG rem = (ULONG)dst % (UWORD)src;
  654.     if (newv > 0xffff) { regs.v = regs.n = 1; } else
  655.     {
  656.     regs.v = regs.c = 0;
  657.     regs.z = ((WORD)(newv)) == 0;
  658.     regs.n = ((WORD)(newv)) < 0;
  659.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  660.     regs.d[dstreg] = (newv);
  661.     }
  662.     }
  663. }}}}}}
  664. void op_80fc(UWORD opcode)
  665. {
  666.     ULONG dstreg = (opcode & 3584) >> 9;
  667. {{    WORD src = nextiword();
  668. {    LONG dst = regs.d[dstreg];
  669.     if(src != 0){
  670.     ULONG newv = (ULONG)dst / (UWORD)src;
  671.     ULONG rem = (ULONG)dst % (UWORD)src;
  672.     if (newv > 0xffff) { regs.v = regs.n = 1; } else
  673.     {
  674.     regs.v = regs.c = 0;
  675.     regs.z = ((WORD)(newv)) == 0;
  676.     regs.n = ((WORD)(newv)) < 0;
  677.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  678.     regs.d[dstreg] = (newv);
  679.     }
  680.     }
  681. }}}}
  682. void op_8100(UWORD opcode)
  683. {
  684.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  685.     ULONG dstreg = (opcode & 3584) >> 9;
  686. {{    BYTE src = regs.d[srcreg];
  687. {    BYTE dst = regs.d[dstreg];
  688. {    UWORD newv = dst - src - regs.x;
  689.     if ((newv & 0xF) > 9) newv-=6;
  690.     regs.c = regs.x = (newv & 0x1F0) > 0x90;
  691.     if (regs.c) newv -= 0x60;
  692.     if (newv != 0) regs.z = 0;
  693.     regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
  694. }}}}}
  695. void op_8108(UWORD opcode)
  696. {
  697.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  698.     ULONG dstreg = (opcode & 3584) >> 9;
  699. {{    regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
  700. {    CPTR srca = regs.a[srcreg];
  701.     BYTE src = get_byte(srca);
  702. {    regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
  703. {    CPTR dsta = regs.a[dstreg];
  704.     BYTE dst = get_byte(dsta);
  705. {    UWORD newv = dst - src - regs.x;
  706.     if ((newv & 0xF) > 9) newv-=6;
  707.     regs.c = regs.x = (newv & 0x1F0) > 0x90;
  708.     if (regs.c) newv -= 0x60;
  709.     if (newv != 0) regs.z = 0;
  710.     put_byte(dsta,newv);
  711. }}}}}}}
  712. void op_8110(UWORD opcode)
  713. {
  714.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  715.     ULONG dstreg = (opcode & 7) >> 0;
  716. {{    BYTE src = regs.d[srcreg];
  717. {    CPTR dsta = regs.a[dstreg];
  718.     BYTE dst = get_byte(dsta);
  719.     src |= dst;
  720.     regs.v = regs.c = 0;
  721.     regs.z = ((BYTE)(src)) == 0;
  722.     regs.n = ((BYTE)(src)) < 0;
  723.     put_byte(dsta,src);
  724. }}}}
  725. void op_8118(UWORD opcode)
  726. {
  727.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  728.     ULONG dstreg = (opcode & 7) >> 0;
  729. {{    BYTE src = regs.d[srcreg];
  730. {    CPTR dsta = regs.a[dstreg];
  731.     BYTE dst = get_byte(dsta);
  732. {    regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
  733.     src |= dst;
  734.     regs.v = regs.c = 0;
  735.     regs.z = ((BYTE)(src)) == 0;
  736.     regs.n = ((BYTE)(src)) < 0;
  737.     put_byte(dsta,src);
  738. }}}}}
  739. void op_8120(UWORD opcode)
  740. {
  741.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  742.     ULONG dstreg = (opcode & 7) >> 0;
  743. {{    BYTE src = regs.d[srcreg];
  744. {    regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
  745. {    CPTR dsta = regs.a[dstreg];
  746.     BYTE dst = get_byte(dsta);
  747.     src |= dst;
  748.     regs.v = regs.c = 0;
  749.     regs.z = ((BYTE)(src)) == 0;
  750.     regs.n = ((BYTE)(src)) < 0;
  751.     put_byte(dsta,src);
  752. }}}}}
  753. void op_8128(UWORD opcode)
  754. {
  755.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  756.     ULONG dstreg = (opcode & 7) >> 0;
  757. {{    BYTE src = regs.d[srcreg];
  758. {    CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
  759.     BYTE dst = get_byte(dsta);
  760.     src |= dst;
  761.     regs.v = regs.c = 0;
  762.     regs.z = ((BYTE)(src)) == 0;
  763.     regs.n = ((BYTE)(src)) < 0;
  764.     put_byte(dsta,src);
  765. }}}}
  766. void op_8130(UWORD opcode)
  767. {
  768.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  769.     ULONG dstreg = (opcode & 7) >> 0;
  770. {{    BYTE src = regs.d[srcreg];
  771. {    CPTR dsta = regs.a[dstreg];
  772.     UWORD dstdp = nextiword();
  773.     dsta += (LONG)(BYTE)(dstdp & 0xFF);
  774. {    ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
  775.     if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
  776.     dsta += dstdpr;
  777. {    BYTE dst = get_byte(dsta);
  778.     src |= dst;
  779.     regs.v = regs.c = 0;
  780.     regs.z = ((BYTE)(src)) == 0;
  781.     regs.n = ((BYTE)(src)) < 0;
  782.     put_byte(dsta,src);
  783. }}}}}}
  784. void op_8138(UWORD opcode)
  785. {
  786.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  787. {{    BYTE src = regs.d[srcreg];
  788. {    CPTR dsta = (LONG)(WORD)nextiword();
  789.     BYTE dst = get_byte(dsta);
  790.     src |= dst;
  791.     regs.v = regs.c = 0;
  792.     regs.z = ((BYTE)(src)) == 0;
  793.     regs.n = ((BYTE)(src)) < 0;
  794.     put_byte(dsta,src);
  795. }}}}
  796. void op_8139(UWORD opcode)
  797. {
  798.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  799. {{    BYTE src = regs.d[srcreg];
  800. {    CPTR dsta = nextilong();
  801.     BYTE dst = get_byte(dsta);
  802.     src |= dst;
  803.     regs.v = regs.c = 0;
  804.     regs.z = ((BYTE)(src)) == 0;
  805.     regs.n = ((BYTE)(src)) < 0;
  806.     put_byte(dsta,src);
  807. }}}}
  808. void op_8150(UWORD opcode)
  809. {
  810.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  811.     ULONG dstreg = (opcode & 7) >> 0;
  812. {{    WORD src = regs.d[srcreg];
  813. {    CPTR dsta = regs.a[dstreg];
  814.     WORD dst = get_word(dsta);
  815.     src |= dst;
  816.     regs.v = regs.c = 0;
  817.     regs.z = ((WORD)(src)) == 0;
  818.     regs.n = ((WORD)(src)) < 0;
  819.     put_word(dsta,src);
  820. }}}}
  821. void op_8158(UWORD opcode)
  822. {
  823.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  824.     ULONG dstreg = (opcode & 7) >> 0;
  825. {{    WORD src = regs.d[srcreg];
  826. {    CPTR dsta = regs.a[dstreg];
  827.     WORD dst = get_word(dsta);
  828. {    regs.a[dstreg] += 2;
  829.     src |= dst;
  830.     regs.v = regs.c = 0;
  831.     regs.z = ((WORD)(src)) == 0;
  832.     regs.n = ((WORD)(src)) < 0;
  833.     put_word(dsta,src);
  834. }}}}}
  835. void op_8160(UWORD opcode)
  836. {
  837.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  838.     ULONG dstreg = (opcode & 7) >> 0;
  839. {{    WORD src = regs.d[srcreg];
  840. {    regs.a[dstreg] -= 2;
  841. {    CPTR dsta = regs.a[dstreg];
  842.     WORD dst = get_word(dsta);
  843.     src |= dst;
  844.     regs.v = regs.c = 0;
  845.     regs.z = ((WORD)(src)) == 0;
  846.     regs.n = ((WORD)(src)) < 0;
  847.     put_word(dsta,src);
  848. }}}}}
  849. void op_8168(UWORD opcode)
  850. {
  851.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  852.     ULONG dstreg = (opcode & 7) >> 0;
  853. {{    WORD src = regs.d[srcreg];
  854. {    CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
  855.     WORD dst = get_word(dsta);
  856.     src |= dst;
  857.     regs.v = regs.c = 0;
  858.     regs.z = ((WORD)(src)) == 0;
  859.     regs.n = ((WORD)(src)) < 0;
  860.     put_word(dsta,src);
  861. }}}}
  862. void op_8170(UWORD opcode)
  863. {
  864.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  865.     ULONG dstreg = (opcode & 7) >> 0;
  866. {{    WORD src = regs.d[srcreg];
  867. {    CPTR dsta = regs.a[dstreg];
  868.     UWORD dstdp = nextiword();
  869.     dsta += (LONG)(BYTE)(dstdp & 0xFF);
  870. {    ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
  871.     if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
  872.     dsta += dstdpr;
  873. {    WORD dst = get_word(dsta);
  874.     src |= dst;
  875.     regs.v = regs.c = 0;
  876.     regs.z = ((WORD)(src)) == 0;
  877.     regs.n = ((WORD)(src)) < 0;
  878.     put_word(dsta,src);
  879. }}}}}}
  880. void op_8178(UWORD opcode)
  881. {
  882.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  883. {{    WORD src = regs.d[srcreg];
  884. {    CPTR dsta = (LONG)(WORD)nextiword();
  885.     WORD dst = get_word(dsta);
  886.     src |= dst;
  887.     regs.v = regs.c = 0;
  888.     regs.z = ((WORD)(src)) == 0;
  889.     regs.n = ((WORD)(src)) < 0;
  890.     put_word(dsta,src);
  891. }}}}
  892. void op_8179(UWORD opcode)
  893. {
  894.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  895. {{    WORD src = regs.d[srcreg];
  896. {    CPTR dsta = nextilong();
  897.     WORD dst = get_word(dsta);
  898.     src |= dst;
  899.     regs.v = regs.c = 0;
  900.     regs.z = ((WORD)(src)) == 0;
  901.     regs.n = ((WORD)(src)) < 0;
  902.     put_word(dsta,src);
  903. }}}}
  904. void op_8190(UWORD opcode)
  905. {
  906.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  907.     ULONG dstreg = (opcode & 7) >> 0;
  908. {{    LONG src = regs.d[srcreg];
  909. {    CPTR dsta = regs.a[dstreg];
  910.     LONG dst = get_long(dsta);
  911.     src |= dst;
  912.     regs.v = regs.c = 0;
  913.     regs.z = ((LONG)(src)) == 0;
  914.     regs.n = ((LONG)(src)) < 0;
  915.     put_long(dsta,src);
  916. }}}}
  917. void op_8198(UWORD opcode)
  918. {
  919.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  920.     ULONG dstreg = (opcode & 7) >> 0;
  921. {{    LONG src = regs.d[srcreg];
  922. {    CPTR dsta = regs.a[dstreg];
  923.     LONG dst = get_long(dsta);
  924. {    regs.a[dstreg] += 4;
  925.     src |= dst;
  926.     regs.v = regs.c = 0;
  927.     regs.z = ((LONG)(src)) == 0;
  928.     regs.n = ((LONG)(src)) < 0;
  929.     put_long(dsta,src);
  930. }}}}}
  931. void op_81a0(UWORD opcode)
  932. {
  933.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  934.     ULONG dstreg = (opcode & 7) >> 0;
  935. {{    LONG src = regs.d[srcreg];
  936. {    regs.a[dstreg] -= 4;
  937. {    CPTR dsta = regs.a[dstreg];
  938.     LONG dst = get_long(dsta);
  939.     src |= dst;
  940.     regs.v = regs.c = 0;
  941.     regs.z = ((LONG)(src)) == 0;
  942.     regs.n = ((LONG)(src)) < 0;
  943.     put_long(dsta,src);
  944. }}}}}
  945. void op_81a8(UWORD opcode)
  946. {
  947.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  948.     ULONG dstreg = (opcode & 7) >> 0;
  949. {{    LONG src = regs.d[srcreg];
  950. {    CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
  951.     LONG dst = get_long(dsta);
  952.     src |= dst;
  953.     regs.v = regs.c = 0;
  954.     regs.z = ((LONG)(src)) == 0;
  955.     regs.n = ((LONG)(src)) < 0;
  956.     put_long(dsta,src);
  957. }}}}
  958. void op_81b0(UWORD opcode)
  959. {
  960.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  961.     ULONG dstreg = (opcode & 7) >> 0;
  962. {{    LONG src = regs.d[srcreg];
  963. {    CPTR dsta = regs.a[dstreg];
  964.     UWORD dstdp = nextiword();
  965.     dsta += (LONG)(BYTE)(dstdp & 0xFF);
  966. {    ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
  967.     if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
  968.     dsta += dstdpr;
  969. {    LONG dst = get_long(dsta);
  970.     src |= dst;
  971.     regs.v = regs.c = 0;
  972.     regs.z = ((LONG)(src)) == 0;
  973.     regs.n = ((LONG)(src)) < 0;
  974.     put_long(dsta,src);
  975. }}}}}}
  976. void op_81b8(UWORD opcode)
  977. {
  978.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  979. {{    LONG src = regs.d[srcreg];
  980. {    CPTR dsta = (LONG)(WORD)nextiword();
  981.     LONG dst = get_long(dsta);
  982.     src |= dst;
  983.     regs.v = regs.c = 0;
  984.     regs.z = ((LONG)(src)) == 0;
  985.     regs.n = ((LONG)(src)) < 0;
  986.     put_long(dsta,src);
  987. }}}}
  988. void op_81b9(UWORD opcode)
  989. {
  990.     ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
  991. {{    LONG src = regs.d[srcreg];
  992. {    CPTR dsta = nextilong();
  993.     LONG dst = get_long(dsta);
  994.     src |= dst;
  995.     regs.v = regs.c = 0;
  996.     regs.z = ((LONG)(src)) == 0;
  997.     regs.n = ((LONG)(src)) < 0;
  998.     put_long(dsta,src);
  999. }}}}
  1000. void op_81c0(UWORD opcode)
  1001. {
  1002.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  1003.     ULONG dstreg = (opcode & 3584) >> 9;
  1004. {{    WORD src = regs.d[srcreg];
  1005. {    LONG dst = regs.d[dstreg];
  1006.     if(src != 0){
  1007.     LONG newv = (LONG)dst / (WORD)src;
  1008.     UWORD rem = (LONG)dst % (WORD)src;
  1009.     if ((newv & 0xffff0000) && (newv & 0xffff0000) != 0xffff0000) { regs.v = regs.n = 1; } else
  1010.     {
  1011.     if (((WORD)rem < 0) != ((LONG)dst < 0)) rem = -rem;
  1012.     regs.v = regs.c = 0;
  1013.     regs.z = ((WORD)(newv)) == 0;
  1014.     regs.n = ((WORD)(newv)) < 0;
  1015.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  1016.     regs.d[dstreg] = (newv);
  1017.     }
  1018.     }
  1019. }}}}
  1020. void op_81d0(UWORD opcode)
  1021. {
  1022.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  1023.     ULONG dstreg = (opcode & 3584) >> 9;
  1024. {{    CPTR srca = regs.a[srcreg];
  1025.     WORD src = get_word(srca);
  1026. {    LONG dst = regs.d[dstreg];
  1027.     if(src != 0){
  1028.     LONG newv = (LONG)dst / (WORD)src;
  1029.     UWORD rem = (LONG)dst % (WORD)src;
  1030.     if ((newv & 0xffff0000) && (newv & 0xffff0000) != 0xffff0000) { regs.v = regs.n = 1; } else
  1031.     {
  1032.     if (((WORD)rem < 0) != ((LONG)dst < 0)) rem = -rem;
  1033.     regs.v = regs.c = 0;
  1034.     regs.z = ((WORD)(newv)) == 0;
  1035.     regs.n = ((WORD)(newv)) < 0;
  1036.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  1037.     regs.d[dstreg] = (newv);
  1038.     }
  1039.     }
  1040. }}}}
  1041. void op_81d8(UWORD opcode)
  1042. {
  1043.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  1044.     ULONG dstreg = (opcode & 3584) >> 9;
  1045. {{    CPTR srca = regs.a[srcreg];
  1046.     WORD src = get_word(srca);
  1047. {    regs.a[srcreg] += 2;
  1048. {    LONG dst = regs.d[dstreg];
  1049.     if(src != 0){
  1050.     LONG newv = (LONG)dst / (WORD)src;
  1051.     UWORD rem = (LONG)dst % (WORD)src;
  1052.     if ((newv & 0xffff0000) && (newv & 0xffff0000) != 0xffff0000) { regs.v = regs.n = 1; } else
  1053.     {
  1054.     if (((WORD)rem < 0) != ((LONG)dst < 0)) rem = -rem;
  1055.     regs.v = regs.c = 0;
  1056.     regs.z = ((WORD)(newv)) == 0;
  1057.     regs.n = ((WORD)(newv)) < 0;
  1058.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  1059.     regs.d[dstreg] = (newv);
  1060.     }
  1061.     }
  1062. }}}}}
  1063. void op_81e0(UWORD opcode)
  1064. {
  1065.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  1066.     ULONG dstreg = (opcode & 3584) >> 9;
  1067. {{    regs.a[srcreg] -= 2;
  1068. {    CPTR srca = regs.a[srcreg];
  1069.     WORD src = get_word(srca);
  1070. {    LONG dst = regs.d[dstreg];
  1071.     if(src != 0){
  1072.     LONG newv = (LONG)dst / (WORD)src;
  1073.     UWORD rem = (LONG)dst % (WORD)src;
  1074.     if ((newv & 0xffff0000) && (newv & 0xffff0000) != 0xffff0000) { regs.v = regs.n = 1; } else
  1075.     {
  1076.     if (((WORD)rem < 0) != ((LONG)dst < 0)) rem = -rem;
  1077.     regs.v = regs.c = 0;
  1078.     regs.z = ((WORD)(newv)) == 0;
  1079.     regs.n = ((WORD)(newv)) < 0;
  1080.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  1081.     regs.d[dstreg] = (newv);
  1082.     }
  1083.     }
  1084. }}}}}
  1085. void op_81e8(UWORD opcode)
  1086. {
  1087.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  1088.     ULONG dstreg = (opcode & 3584) >> 9;
  1089. {{    CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
  1090.     WORD src = get_word(srca);
  1091. {    LONG dst = regs.d[dstreg];
  1092.     if(src != 0){
  1093.     LONG newv = (LONG)dst / (WORD)src;
  1094.     UWORD rem = (LONG)dst % (WORD)src;
  1095.     if ((newv & 0xffff0000) && (newv & 0xffff0000) != 0xffff0000) { regs.v = regs.n = 1; } else
  1096.     {
  1097.     if (((WORD)rem < 0) != ((LONG)dst < 0)) rem = -rem;
  1098.     regs.v = regs.c = 0;
  1099.     regs.z = ((WORD)(newv)) == 0;
  1100.     regs.n = ((WORD)(newv)) < 0;
  1101.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  1102.     regs.d[dstreg] = (newv);
  1103.     }
  1104.     }
  1105. }}}}
  1106. void op_81f0(UWORD opcode)
  1107. {
  1108.     ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
  1109.     ULONG dstreg = (opcode & 3584) >> 9;
  1110. {{    CPTR srca = regs.a[srcreg];
  1111.     UWORD srcdp = nextiword();
  1112.     srca += (LONG)(BYTE)(srcdp & 0xFF);
  1113. {    ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
  1114.     if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
  1115.     srca += srcdpr;
  1116. {    WORD src = get_word(srca);
  1117. {    LONG dst = regs.d[dstreg];
  1118.     if(src != 0){
  1119.     LONG newv = (LONG)dst / (WORD)src;
  1120.     UWORD rem = (LONG)dst % (WORD)src;
  1121.     if ((newv & 0xffff0000) && (newv & 0xffff0000) != 0xffff0000) { regs.v = regs.n = 1; } else
  1122.     {
  1123.     if (((WORD)rem < 0) != ((LONG)dst < 0)) rem = -rem;
  1124.     regs.v = regs.c = 0;
  1125.     regs.z = ((WORD)(newv)) == 0;
  1126.     regs.n = ((WORD)(newv)) < 0;
  1127.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  1128.     regs.d[dstreg] = (newv);
  1129.     }
  1130.     }
  1131. }}}}}}
  1132. void op_81f8(UWORD opcode)
  1133. {
  1134.     ULONG dstreg = (opcode & 3584) >> 9;
  1135. {{    CPTR srca = (LONG)(WORD)nextiword();
  1136.     WORD src = get_word(srca);
  1137. {    LONG dst = regs.d[dstreg];
  1138.     if(src != 0){
  1139.     LONG newv = (LONG)dst / (WORD)src;
  1140.     UWORD rem = (LONG)dst % (WORD)src;
  1141.     if ((newv & 0xffff0000) && (newv & 0xffff0000) != 0xffff0000) { regs.v = regs.n = 1; } else
  1142.     {
  1143.     if (((WORD)rem < 0) != ((LONG)dst < 0)) rem = -rem;
  1144.     regs.v = regs.c = 0;
  1145.     regs.z = ((WORD)(newv)) == 0;
  1146.     regs.n = ((WORD)(newv)) < 0;
  1147.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  1148.     regs.d[dstreg] = (newv);
  1149.     }
  1150.     }
  1151. }}}}
  1152. void op_81f9(UWORD opcode)
  1153. {
  1154.     ULONG dstreg = (opcode & 3584) >> 9;
  1155. {{    CPTR srca = nextilong();
  1156.     WORD src = get_word(srca);
  1157. {    LONG dst = regs.d[dstreg];
  1158.     if(src != 0){
  1159.     LONG newv = (LONG)dst / (WORD)src;
  1160.     UWORD rem = (LONG)dst % (WORD)src;
  1161.     if ((newv & 0xffff0000) && (newv & 0xffff0000) != 0xffff0000) { regs.v = regs.n = 1; } else
  1162.     {
  1163.     if (((WORD)rem < 0) != ((LONG)dst < 0)) rem = -rem;
  1164.     regs.v = regs.c = 0;
  1165.     regs.z = ((WORD)(newv)) == 0;
  1166.     regs.n = ((WORD)(newv)) < 0;
  1167.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  1168.     regs.d[dstreg] = (newv);
  1169.     }
  1170.     }
  1171. }}}}
  1172. void op_81fa(UWORD opcode)
  1173. {
  1174.     ULONG dstreg = (opcode & 3584) >> 9;
  1175. {{    CPTR srca = m68k_getpc();
  1176.     srca += (LONG)(WORD)nextiword();
  1177. {    WORD src = get_word(srca);
  1178. {    LONG dst = regs.d[dstreg];
  1179.     if(src != 0){
  1180.     LONG newv = (LONG)dst / (WORD)src;
  1181.     UWORD rem = (LONG)dst % (WORD)src;
  1182.     if ((newv & 0xffff0000) && (newv & 0xffff0000) != 0xffff0000) { regs.v = regs.n = 1; } else
  1183.     {
  1184.     if (((WORD)rem < 0) != ((LONG)dst < 0)) rem = -rem;
  1185.     regs.v = regs.c = 0;
  1186.     regs.z = ((WORD)(newv)) == 0;
  1187.     regs.n = ((WORD)(newv)) < 0;
  1188.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  1189.     regs.d[dstreg] = (newv);
  1190.     }
  1191.     }
  1192. }}}}}
  1193. void op_81fb(UWORD opcode)
  1194. {
  1195.     ULONG dstreg = (opcode & 3584) >> 9;
  1196. {{    CPTR srca = m68k_getpc();
  1197.     UWORD srcdp = nextiword();
  1198.     srca += (LONG)(BYTE)(srcdp & 0xFF);
  1199. {    ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
  1200.     if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
  1201.     srca += srcdpr;
  1202. {    WORD src = get_word(srca);
  1203. {    LONG dst = regs.d[dstreg];
  1204.     if(src != 0){
  1205.     LONG newv = (LONG)dst / (WORD)src;
  1206.     UWORD rem = (LONG)dst % (WORD)src;
  1207.     if ((newv & 0xffff0000) && (newv & 0xffff0000) != 0xffff0000) { regs.v = regs.n = 1; } else
  1208.     {
  1209.     if (((WORD)rem < 0) != ((LONG)dst < 0)) rem = -rem;
  1210.     regs.v = regs.c = 0;
  1211.     regs.z = ((WORD)(newv)) == 0;
  1212.     regs.n = ((WORD)(newv)) < 0;
  1213.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  1214.     regs.d[dstreg] = (newv);
  1215.     }
  1216.     }
  1217. }}}}}}
  1218. void op_81fc(UWORD opcode)
  1219. {
  1220.     ULONG dstreg = (opcode & 3584) >> 9;
  1221. {{    WORD src = nextiword();
  1222. {    LONG dst = regs.d[dstreg];
  1223.     if(src != 0){
  1224.     LONG newv = (LONG)dst / (WORD)src;
  1225.     UWORD rem = (LONG)dst % (WORD)src;
  1226.     if ((newv & 0xffff0000) && (newv & 0xffff0000) != 0xffff0000) { regs.v = regs.n = 1; } else
  1227.     {
  1228.     if (((WORD)rem < 0) != ((LONG)dst < 0)) rem = -rem;
  1229.     regs.v = regs.c = 0;
  1230.     regs.z = ((WORD)(newv)) == 0;
  1231.     regs.n = ((WORD)(newv)) < 0;
  1232.     newv = (newv & 0xffff) | ((ULONG)rem << 16);
  1233.     regs.d[dstreg] = (newv);
  1234.     }
  1235.     }
  1236. }}}}
  1237.